const fs = require('fs');
const articleService = require('../service/article.service');
const fileService = require('../service/file.service');
const {ARTICLE_PIC_PATH} = require('../constants/file-path');

class ArticleController {
  // 创建一篇文章
  async create(ctx, next) {
    // 1.获取参数
    const {title, classifyId, content, count} = ctx.request.body;
    console.log(content);
    const {id} = ctx.user;
    // 2.操作数据库
    const result = await articleService.create(id, title, classifyId, content, count);
    // 3.返回结果
    ctx.body = result;
  }

  // 删除一篇文章
  async remove(ctx, next) {
    // 1.获取参数
    const {articleId} = ctx.params;
    const {id} = ctx.user;
    // 2.操作数据库
    const result = await articleService.remove(id, articleId);
    // 3返回结果
    ctx.body = result;
  }

  // 修改一篇文章
  async update(ctx, next) {
    // 1.获取参数
    const {title, classifyId, content, count, articleId} = ctx.request.body;
    const {id} = ctx.user;
    // 2.操作数据库
    const result = await articleService.update(id, title, classifyId, content, count, articleId);
    // 3.返回结果
    ctx.body = result;
  }

  // 获取一个文章详情
  async detail(ctx, next) {
    // 1.获取参数
    const {id} = ctx.query;
    // 2.操作数据库
    const result = await articleService.detail(id);
    // 3.返回结果
    ctx.body = result;
  }

  // 获取文章列表
  async list(ctx, next) {
    // 1.获取参数
    const {userId, offset, limit} = ctx.query;
    // 2.操作数据库
    const result = await articleService.list(userId, offset, limit);
    // 3.返回结果
    ctx.body = result;
  }

  // 获取文章分类
  async classify(ctx, next) {
    // 1.获取参数
    const {userId} = ctx.query;
    // 2.操作数据库
    const result = await articleService.classify(userId);
    // 3.返回结果
    ctx.body = result;
  }

  // 按分类获取文章
  async articles(ctx, next) {
    // 1.获取参数
    const {classifyId} = ctx.params;
    const {userId} = ctx.query;
    // 2.操作数据库
    const result = await articleService.articles(userId, classifyId);
    // 3.返回结果
    ctx.body = result;
  }

  // 创建文章分类
  async createClassify(ctx, next) {
    // 1.获取参数
    const {classify} = ctx.request.body;
    const {id} = ctx.user;
    // 2.操作数据库
    const result = await articleService.createClassify(id, classify);
    // 3.返回结果
    ctx.body = result;
  }

  // 删除文章分类
  async deleteClassify(ctx, next) {
    // 1.获取参数
    const {classifyId} = ctx.params;
    const {id} = ctx.user;
    // 2.操作数据库
    const result = await articleService.deleteClassify(classifyId, id);
    // 3.返回结果
    ctx.body = result;
  }

  // 修改文章分类
  async updateClassify(ctx, next) {
    // 1.获取参数
    const {classifyId, classify} = ctx.request.body;
    const {id} = ctx.user;
    // 2.操作数据库
    const result = await articleService.updateClassify(classify, classifyId, id);
    // 3.返回结果
    ctx.body = result;
  }

  // 返回文章配图
  async articlePicInfo(ctx, next) {
    try {
      // 1.获取参数
      const {filename} = ctx.params;
      // 2.查询数据
      const picInfo = await fileService.getArticlePicByFilename(filename);
      // 3.返回数据
      ctx.response.set('content-type', picInfo.mimetype);
      ctx.body = fs.createReadStream(`${ARTICLE_PIC_PATH}/${filename}`);
    } catch (error) {
      console.log(error);
    }
  }

}

module.exports = new ArticleController();